根据题意,我们要求序列中的最大的非完全平方数。
求最大,有两种思路:
- sort从大到小
- max函数取最大
这里采用第二种思路。
头文件部分:
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
iostream,C++基础头文件。
limits.h,为了后面的INT_MIN。
math.h,为了开方。
判断不是完全平方数
if(int(sqrt(a))*int(sqrt(a)) != a)
原理:int自动向下取整,平方根的平方就是数本身。
取最大
MAX = INT_MIN;
//中间代码
MAX = max(MAX, a);
INT_MIN是limits.h里面存储int的下界的常量,见:#define INT_MIN (-2147483647-1)
max函数是取前后的最大值的函数。
把以上部分整合,得到完整代码:
#include <iostream>
#include <limits.h>
#include <math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a;
int MAX = INT_MIN;
for(int i=0;i<n;i++)
{
cin>>a;
if(int(sqrt(a)) * int(sqrt(a)) != a)
MAX = max(MAX, a);
}
cout<<MAX<<endl;
return 0;
}